#include "stm32f1xx_hal.h"
#include "onewire.h"
#include "bsp_tim.h"
#include "bsp_gpio.h"


//开始函数
uint8_t OneWire_Start(void)
{
    uint8_t AckBit = 0;
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_SET); //拉高
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_RESET); //拉低
    Delay_us(500); //延时
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_SET); //拉高
    Delay_us(70); //延时
    AckBit = HAL_GPIO_ReadPin(OW_GPIO_PORT, OW_GPIO_PIN); //读取
    Delay_us(500); //延时
    return AckBit; //返回
}

//发送一位
void OneWire_SendBit(uint8_t Bit)
{
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_RESET); //拉低
    Delay_us(5); //延时
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, Bit ? GPIO_PIN_SET : GPIO_PIN_RESET); //根据Bit的值设置
    Delay_us(55); //延时
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_SET); //拉高
}

//接收一位
uint8_t OneWire_ReceiveBit(void)
{
    uint8_t Bit = 0;
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_RESET); //拉低
    Delay_us(5); //延时
    HAL_GPIO_WritePin(OW_GPIO_PORT, OW_GPIO_PIN, GPIO_PIN_SET); //拉高
    Delay_us(5); //延时
    Bit = HAL_GPIO_ReadPin(OW_GPIO_PORT, OW_GPIO_PIN); //读取
    Delay_us(50); //延时
    return Bit; //返回 
}

//发送一个字节
void OneWire_SendByte(uint8_t Byte)
{
    uint8_t i = 0;
    for (i = 0; i < 8; i++) //循环8次
    {
        OneWire_SendBit(Byte & (0x01<<i)); //发送一位 //右移一位
    }
}

//接收一个字节
uint8_t OneWire_ReceiveByte(void)
{
    uint8_t i = 0, Byte = 0x00;
    for (i = 0; i < 8; i++) //循环8次
    {
        if(OneWire_ReceiveBit())
        {
            Byte |= (0x01<<i); //接收一位 //左移一位 
        }
    }
    return Byte; //返回
}